home *** CD-ROM | disk | FTP | other *** search
Text File | 1999-06-17 | 12.7 KB | 323 lines | [TEXT/CWIE] |
- // Copyright (C) 1999 Eric Roccasecca. All rights reserved.
-
- #include <Sound.h>
- #include <QDOffscreen.h>
- #include <TextServices.h>
-
- #include "X_Ray.h"
- #include "Layers.h"
-
- enum
- {
- kStdLineProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Point))),
- kStdRectProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*))),
- kStdRgnProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(RgnHandle))),
- kStdOvalProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*))),
- kStdRRectProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(short))),
- kStdArcProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(short))),
- kStdPolyProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(GrafVerb)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(PolyHandle))),
- kStdBitsProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(RgnHandle))),
- kCopyBitsProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(RgnHandle))),
- kCopyDeepMaskProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(7,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(8,SIZE_CODE(sizeof(RgnHandle))),
- kCopyMaskProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(BitMap*)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(Rect*))),
- kScrollRectProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(RgnHandle))),
- kStdTextProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(void*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Point*)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Point*))),
- kMoveWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Boolean))),
- kCloseWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
- kSizeWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Boolean))),
- kGrowWindowProcInfo = kPascalStackBased
- | RESULT_SIZE (SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Point)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*))),
- kHideWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
- kShowWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
- kShowHideProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Boolean))),
- kBringToFrontProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
- kSelectWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr))),
- kDragWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Point)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*))),
- kZoomWindowProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Boolean))),
- kSendBehindProcInfo = kPascalStackBased
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(WindowPtr))),
- kDragGrayRgnProcInfo = kPascalStackBased
- | RESULT_SIZE (SIZE_CODE(sizeof(long)))
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(RgnHandle)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Point)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(long))),
- kFindWindowProcInfo = kPascalStackBased
- | RESULT_SIZE (SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(Point)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(WindowPtr*))),
- kInitWindowsProcInfo = kPascalStackBased,
- kNewPtrProcInfo = kRegisterBased
- | RESULT_SIZE(SIZE_CODE(sizeof(Ptr)))
- | REGISTER_RESULT_LOCATION(kRegisterA0)
- | REGISTER_ROUTINE_PARAMETER(1, kRegisterD1,SIZE_CODE(sizeof(long)))
- | REGISTER_ROUTINE_PARAMETER(2, kRegisterD0,SIZE_CODE(sizeof(Size))),
- kNewWindowProcInfo = kPascalStackBased
- | RESULT_SIZE (SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(void*)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(Rect*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(char*)))
- | STACK_ROUTINE_PARAMETER(4,SIZE_CODE(sizeof(Boolean)))
- | STACK_ROUTINE_PARAMETER(5,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(6,SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(7,SIZE_CODE(sizeof(Boolean)))
- | STACK_ROUTINE_PARAMETER(8,SIZE_CODE(sizeof(long))),
- kGetNewWindowProcInfo = kPascalStackBased
- | RESULT_SIZE (SIZE_CODE(sizeof(WindowPtr)))
- | STACK_ROUTINE_PARAMETER(1,SIZE_CODE(sizeof(short)))
- | STACK_ROUTINE_PARAMETER(2,SIZE_CODE(sizeof(void*)))
- | STACK_ROUTINE_PARAMETER(3,SIZE_CODE(sizeof(WindowPtr)))
- };
-
-
- enum {
- kTransparencyOpaque = 0x0000,
- kTransparencyClear = 0xFFFF,
-
- kTransparencyNormal = 0xA000,
-
- kTransparencyFadeIncrement = 0x2500
- };
-
- typedef struct X_Ray_AppRec **X_Ray_AppRecHandle;
- typedef struct X_Ray_Window **X_Ray_WindowHandle;
-
- typedef struct X_Ray_Window {
- X_Ray_WindowHandle previousWindow;
- WindowPtr theWindow;
- long windowKind;
- X_Ray_AppRecHandle owner;
- unsigned short transparency;
- unsigned short normalTransparency;
- RGBColor clearColor;
- GWorldPtr underBuffer;
- GWorldPtr contentBuffer;
- GWorldPtr mixBuffer;
- GWorldPtr maskBuffer;
- RgnHandle transparentUpdateRgn;
- RgnHandle transparentRgn;
- Handle origWDEF;
- X_Ray_WindowHandle nextWindow;
- } X_Ray_Window, **X_Ray_WindowHandle;
-
-
- typedef struct X_Ray_AppRec {
- X_Ray_AppRecHandle previousApp;
- ProcessSerialNumber appSerialNum;
- LayerPtr appGlobalWindow;
- UniversalProcPtr appInitWindows;
- Boolean appWindowsAreInited;
- Str63 name;
- long mode; // as in background only, etc.
- X_Ray_WindowHandle windowList;
- X_Ray_WindowHandle lastWindow;
- X_Ray_AppRecHandle nextApp;
- } X_Ray_AppRec, **X_Ray_AppRecHandle;
-
-
- // X_Ray_CommRec is used for communication back and forth between the extension and X_RayLib
- typedef struct X_Ray_CommRec {
- Handle wdefStub; // pseudo WDEF for patching real WDEFs so they behave like
- // transparent windows
- X_Ray_WindowHandle tsmWindowList;
- X_Ray_WindowHandle tsmLastWindow;
- X_Ray_AppRecHandle appList;
- } X_Ray_CommRec, *X_Ray_CommRecPtr, **X_Ray_CommRecHandle;
-
- extern X_Ray_CommRec gCommRec;
-
-
- typedef struct X_Ray_WDEFRec {
- RoutineDescriptor wdefProc;
- } X_Ray_WDEFRec, *X_Ray_WDEFPtr, **X_Ray_WDEFHandle;
-
-
- typedef struct X_Ray_IntersectRec **X_Ray_IntersectHandle;
- typedef struct X_Ray_IntersectRec {
- X_Ray_WindowHandle theWindow;
- X_Ray_IntersectHandle nextIntersect;
- } X_Ray_IntersectRec, *X_Ray_IntersectPtr, **X_Ray_IntersectHandle;
-
-
- // feature kinds for X_Ray_GetWindowFeature
- enum {
- kTransWindowUnderBuffer,
- kTransWindowContentBuffer,
- kTransWindowMixBuffer,
- kTransWindowTransparency,
- kX_RayWindowKind,
- kClearWindowClearColor,
- kTransWindowOwner,
- kTransWindowStandardWDEF
- };
-
-
- // transparent window kind/flags
- enum {
- kTSMWindow = 1L << 0,
- kAppWindow = 1L << 1,
- kAppDialog = 1L << 2,
- kIsClear = 1L << 8,
- kWindowDisposed = 1L << 31,
- };
-
-
- // reorder methods
- enum {
- kROMethod_BringToFront,
- kROMethod_SendBehind,
- kROMethod_MoveWindow,
- kROMethod_DragWindow,
- kROMethod_HideWindow,
- kROMethod_ShowHide,
- kROMethod_SelectWindow
- };
-
-
- // Patch Prototypes
- Boolean InitInternalWindowManager (void);
- Boolean InitInternalQuickDraw (void);
-
- // WDEF
- pascal long X_Ray_WDEF (short varCode, WindowPeek window, short message, long param);
- X_Ray_WindowHandle X_Ray_GetTransparentWindowRec (WindowPtr theWindow);
- void X_Ray_BuildWDEF (void);
-
- // X_Ray Protos
- long X_Ray_GetWindowFeature (WindowPtr theWindow, short kFeatureKind);
- X_Ray_WindowHandle PortDoesIntersect (GrafPtr thePort, RgnHandle drawRgn);
- Boolean PortIsOnScreen (GrafPtr thePort);
- Boolean BitMapIsOnScreen (const BitMap *theBMap);
- void ReorderWindow (X_Ray_WindowHandle, short, WindowPtr);
- X_Ray_AppRecHandle WindowIsGlobalAppWindow (WindowPtr theWindow);
- void X_Ray_FixOwningListEnds (X_Ray_WindowHandle theWindow);
- void AssureOldWindowLocationIsRefreshed (WindowPtr theWindow, RgnHandle oldStrucRgn);
- void AssureMovingWindowIsRefreshed (WindowPtr theWindow);
- void AssureUpdateForTransparent (WindowPtr theWindow);
-
- #ifndef WINDOWLIBCOMPILE
-
- OSErr X_Ray_DisposeWindow (X_Ray_WindowHandle deadWin);
- X_Ray_WindowHandle X_Ray_GetWindowRec (WindowPtr theWindow);
- void X_Ray_CheckAndFixWindowListHead (X_Ray_WindowHandle deadWin);
- X_Ray_WindowHandle GetNextWindowAbove (X_Ray_WindowHandle theWindow);
- X_Ray_WindowHandle GetNextWindowBehind (X_Ray_WindowHandle theWindow);
- WindowPtr GetNextNormalWindow (WindowPtr theWindow, X_Ray_AppRecHandle *curApp);
- void DumpTransparentWindowList (void);
-
- #endif
-
-
- // App Prototypes
- X_Ray_AppRecHandle RememberApp (void);
- void ForgetApp (void);
- X_Ray_AppRecHandle GetCurrentAppRec (void);
- void PurgeDeadAppWindows (X_Ray_AppRecHandle deletedApp);
- RgnHandle ReorderApp (X_Ray_AppRecHandle theApp, short reorderMethod);
- UniversalProcPtr GetLocalTrap (long trapNum);
- Boolean AppInitWindowsState (void);
- void SetAppGlobalWindow (WindowPtr theAppGWindow);
- void CleanAppList();
-
- // Menu Protos
- Boolean ApplyMenuPatches (void);
-
- // Frame Window Prototypes
- Boolean X_Ray_ShareWindow (WindowPtr sharedWin);
- void X_Ray_MonitorFrameWindows (void);
- void X_Ray_DisposeAllFrames (void);
- void X_Ray_DisposeSharedWindow (X_Ray_WindowHandle curWindow, Boolean ownerDied);
- X_Ray_WindowHandle X_Ray_FindIfTransparent (WindowPtr testWindow);
- X_Ray_WindowHandle X_Ray_FindIfFrame (WindowPtr testWindow);
- void X_Ray_RememberSharedWindowStructRect (X_Ray_WindowHandle theWindow);
-
- // Utility Functions Prototypes
- void DebugNum (long bugNum);
- void NumToHexString (long number, StringPtr string);
- Boolean isPressed (unsigned short key);
- void X_Ray_NormalizeRect (Rect *theRect);
- void X_Ray_LocalToGlobalRect (Rect *theRect);
- void X_Ray_GlobalToLocalRect (Rect *theRect);
- void X_Ray_LocalToGlobalPoly (PolyHandle thePoly);
- void X_Ray_GlobalToLocalPoly (PolyHandle thePoly);
- void X_Ray_LocalToGlobalRgn (RgnHandle theRgn);
- void X_Ray_GlobalToLocalRgn (RgnHandle theRgn);
- void ConfirmRgn (RgnHandle theRgn);
-